package com.itheima.ssm.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.ssm.domain.Order;
import com.itheima.ssm.service.IOrderService;
import com.itheima.ssm.utils.DateStringEidtor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import java.util.Date;
import java.util.List;

@Controller
@RequestMapping("/orders")
public class OrderController {

    @Autowired
    private IOrderService iOrderService;

    // 注意Date类型的数据转化
    // 下面我们通过PropertyEditor来实现
    @InitBinder
    public void intiBuilder(WebDataBinder webDataBinder) {
        webDataBinder.registerCustomEditor(Date.class,new DateStringEidtor());
    }

    /**
     * 没有分页的
     * @param start
     * @param size
     * @return
     * @throws Exception
     */
   /* @RequestMapping("/findAll.do")
    public ModelAndView findAll() throws Exception {
        ModelAndView mv = new ModelAndView();
        List<Order> orderList = iOrderService.findAll();
        mv.addObject("orderList",orderList); // 设置模型，即查询到的后台数据
        mv.setViewName("order-list"); // 设置视图，将查询的订单结果返回页面order-list中
        return mv;
    }*/

    /**
     * 分页查询
     * @param page
     * @param size
     * @return
     * @throws Exception
     */
    @RequestMapping("/findAll.do")
    // 或者使用注解@RequestParam(name="page",required=true,defaultValue="1") int page,@RequestParam(...) int size
    public ModelAndView findAll(@PathVariable("page") int page,@PathVariable("size") int size) throws Exception {
        ModelAndView mv = new ModelAndView();
        List<Order> orderList = iOrderService.findAll(page,size);
        // 创建一个PageInfo Bean对象 将orderList作为参数传递给pageInfo
        // 注意此时我们需要将pageInfo这个Bean传递给页面而不是orderList
        // 所以此时我们还需要修改一下order-list页面，通过pageInfo来获取order
        PageInfo pageInfo = new PageInfo(orderList);
        mv.addObject("pageInfo",pageInfo); // 设置模型，即查询到的后台数据
        mv.setViewName("order-list"); // 设置视图，将查询的订单结果返回页面order-list中
        return mv;
    }


    /**
     * 查询订单的详细信息
     * @param orderId
     * @return
     */
    @RequestMapping("/findById.do")
    // 接受url地址中的参数，获取需要查询的订单id是多少
    // 注意：页面上传递的是String类型，但是SpringMVC的默认转化器会帮助我们自动转化为int类型
    public ModelAndView findById(@RequestParam(name = "id",required = true) int orderId) throws Exception {
        ModelAndView mv = new ModelAndView();
        Order orderDetail = iOrderService.findById(orderId);
        mv.addObject("orderDetail",orderDetail);
        mv.setViewName("order-show");
        return mv;
    }

}
